﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once

#include "GcmpGuiInterface.h"
#include "ITransactionErrorProcessor.h"
#include <vector>

namespace gcmp
{
    class ITransactionError;
    class IUserTransaction;

    /// \brief 在对话框中显示TransactionError，用户只能选择确定并回滚事务。
    /// 
    /// 是ITransactionErrorProcessor的一个Gui层实现，通过UserTransactionUtils::SetTransactionErrorProcessor()设置。
    /// \see ITransactionErrorProcessor UserTransactionUtils
    class GCMP_GUI_INTERFACE_EXPORT UiTransactionErrorProcessor : public ITransactionErrorProcessor
    {
    public:
        /// \brief 事务错误处理
        ///
        /// 提供的实现是：显示所有的错误消息，用户只能选择确定，事务被回滚。
        /// \return  true 成功处理 false 未成功处理
        virtual bool Process(const std::vector<const ITransactionError*>& transactionErrors) override;

        /// \brief 处理最后一个错误。
        ///
        /// 处理方式是：如果发现当前事务中有错误，回滚事务。
        /// \param pUserTransaction 当前事务
        /// \param showError 是否显示错误消息。默认显示
        static void ProcessLastError(IUserTransaction* pUserTransaction, bool showError = true);
    };
}
